package main

import (
	"fmt"
	. "local/algorithm/util"
)

func main() {

	/**
	  4 1
		  8 4 5
	5 6 1
	*/
	//mix := &ListNode{
	//	Val:  8,
	//	Forward: &ListNode{
	//		Val:  4,
	//		Forward: &ListNode{
	//			Val:  5,
	//			Forward: nil,
	//		},
	//	},
	//}
	//
	//l1:=&ListNode{
	//	Val:  4,
	//	Forward: &ListNode{
	//		Val:  1,
	//		Forward: mix,
	//	},
	//}
	//
	//l2:=&ListNode{
	//	Val:  5,
	//	Forward: &ListNode{
	//		Val:  6,
	//		Forward: &ListNode{
	//			Val:  1,
	//			Forward: mix,
	//		},
	//	},
	//}

	//n1 := &ListNode{
	//	Val:  1,
	//	Forward: nil,
	//}
	//n2 := &ListNode{
	//	Val:  2,
	//	Forward: nil,
	//}
	//n3 := &ListNode{
	//	Val:  3,
	//	Forward: nil,
	//}
	//
	//n4 := &ListNode{
	//	Val:  4,
	//	Forward: nil,
	//}
	//n5 := &ListNode{
	//	Val:  5,
	//	Forward: nil,
	//}
	//
	//n1.Forward = n2
	//n2.Forward = n3
	//n3.Forward = n4
	//n5.Forward = n3
	//
	//fmt.Println(getIntersectionNode(n1, n5))

	/**
	2 6 4
	  1 5
	*/
	//l1 := &ListNode{
	//	Val: 2,
	//	Next: &ListNode{
	//		Val: 6,
	//		Next: &ListNode{
	//			Val:  4,
	//			Next: nil,
	//		},
	//	},
	//}
	//l2 := &ListNode{
	//	Val: 1,
	//	Next: &ListNode{
	//		Val:  5,
	//		Next: nil,
	//	},
	//}
	l1 := &ListNode{
		Val: 2,
		Next: &ListNode{
			Val: 6,
			Next: &ListNode{
				Val:  4,
				Next: nil,
			},
		},
	}
	l2 := &ListNode{
		Val: 1,
		Next: &ListNode{
			Val:  5,
			Next: nil,
		},
	}
	fmt.Println(getIntersectionNode(l1, l2))

}

func getIntersectionNode(headA, headB *ListNode) *ListNode {
	if headA == nil || headB == nil {
		return nil
	}

	i, j := headA, headB
	if i != j {
		if i == nil {
			i = headB
		} else {
			i = i.Next
		}

		if j == nil {
			j = headA
		} else {
			j = j.Next
		}
	}
	return i
}
